Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/frontend/js/plugins/PluginHost.js e5756d7ab065475a18acdcafc008a767fcff87e0 (e5756d7a) Text, 10.44 KB

T8b949e// SPDX-License-Identifier: 0BSD

Tff7b72import Tb4b4b4{ Te6edf3validatePluginManifest Tb4b4b4} Tff7b72from Ta5d6ff"./pluginManifest.js"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3loadPluginLabelMapTb4b4b4, Te6edf3resolvePluginUiString Tb4b4b4} Tff7b72from Ta5d6ff"./pluginLabels.js"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3setPluginUiLabelsTb4b4b4, Te6edf3clearPluginUiLabels Tb4b4b4} Tff7b72from Ta5d6ff"./pluginUiRegistry.js"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3registerNavItemTb4b4b4, Te6edf3unregisterNavItem Tb4b4b4} Tff7b72from Ta5d6ff"../registries/navRegistry.js"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3registerToolTb4b4b4, Te6edf3unregisterTool Tb4b4b4} Tff7b72from Ta5d6ff"../registries/toolsRegistry.js"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3onWsEventTb4b4b4, Te6edf3offWsEvent Tb4b4b4} Tff7b72from Ta5d6ff"../registries/wsEventRegistry.js"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../ToastUtils.js"Tb4b4b4;

T8b949e/** @typedef {import('./pluginManifest.js').PluginManifest} PluginManifest */

Tff7b72const Te6edf3FAILURE_REPORT_INTERVAL_MS Tff7b72= T79c0ff5000Tb4b4b4;
T8b949e/** @type {Map<string, number>} */
Tff7b72const Te6edf3lastFailureReportAt Tff7b72= Tff7b72new Tffa657MapTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72export Tff7b72class Te6edf3PluginHost Tb4b4b4{
Tff7b72constructorTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e/** @type {Map<string, { worker: Worker, cleanup: Array<() => void>, manifest: PluginManifest, lastDescriptor: object | null, apiClient: ReturnType<import('../apiClient.js').createApiClient> | null }>} */
Tff7b72thisTb4b4b4.Te6edf3instances Tff7b72= Tff7b72new Tffa657MapTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {ReturnType<import('../apiClient.js').createApiClient>} apiClient
* @param {string} [locale]
*/
Tff7b72async Te6edf3loadEnabledPluginsTb4b4b4(Te6edf3apiClientTb4b4b4, Te6edf3locale Tff7b72= Ta5d6ff"en"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Te6edf3apiClientTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/plugins"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3plugins Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3plugins Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3plugin Tff7b72of Te6edf3pluginsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3pluginTb4b4b4.Te6edf3enabledTb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadPluginTb4b4b4(Te6edf3pluginTb4b4b4, Te6edf3apiClientTb4b4b4, Te6edf3localeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

T8b949e/**
* @param {Record<string, unknown>} plugin
* @param {ReturnType<import('../apiClient.js').createApiClient>} apiClient
* @param {string} [locale]
*/
Tff7b72async Te6edf3loadPluginTb4b4b4(Te6edf3pluginTb4b4b4, Te6edf3apiClientTb4b4b4, Te6edf3locale Tff7b72= Ta5d6ff"en"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3pluginId Tff7b72= Te6edf3pluginTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3instancesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3manifest Tff7b72= Te6edf3validatePluginManifestTb4b4b4(Te6edf3pluginTb4b4b4.Te6edf3manifestTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3manifestTb4b4b4.Te6edf3frontendTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3labels Tff7b72= Tff7b72await Te6edf3loadPluginLabelMapTb4b4b4(Te6edf3apiClientTb4b4b4, Te6edf3pluginIdTb4b4b4, Te6edf3localeTb4b4b4, Te6edf3manifestTb4b4b4)Tb4b4b4;
Te6edf3setPluginUiLabelsTb4b4b4(Te6edf3pluginIdTb4b4b4, Te6edf3labelsTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3assetUrl Tff7b72= Ta5d6ff`Ta5d6ff/api/v1/plugins/Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3pluginIdTb4b4b4)Tffd700}Ta5d6ff/asset/Tffd700${Te6edf3manifestTb4b4b4.Te6edf3frontendTb4b4b4.Te6edf3entryTffd700}Ta5d6ff?v=Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3manifestTb4b4b4.Te6edf3version Tff7b72|| Ta5d6ff"1"Tb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3sourceResponse Tff7b72= Tff7b72await Te6edf3apiClientTb4b4b4.Te6edf3getTb4b4b4(Te6edf3assetUrlTb4b4b4, Tb4b4b4{ Te6edf3responseTypeTff7b72: Ta5d6ff"text" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3source Tff7b72=
Tff7b72typeof Te6edf3sourceResponseTb4b4b4.Te6edf3data Tff7b72=== Ta5d6ff"string" Tff7b72? Te6edf3sourceResponseTb4b4b4.Te6edf3data Tff7b72: Tffa657StringTb4b4b4(Te6edf3sourceResponseTb4b4b4.Te6edf3data Tff7b72?? Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3worker Tff7b72= Tff7b72new Te6edf3WorkerTb4b4b4(Tff7b72new Te6edf3URLTb4b4b4(Ta5d6ff"./pluginWorker.js"Tb4b4b4, Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3urlTb4b4b4)Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"module" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3cleanup Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;

Te6edf3workerTb4b4b4.Te6edf3onmessage Tff7b72= Tb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3handleWorkerMessageTb4b4b4(Te6edf3pluginIdTb4b4b4, Te6edf3eventTb4b4b4.Te6edf3dataTb4b4b4, Te6edf3apiClientTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3workerTb4b4b4.Te6edf3onerror Tff7b72= Tb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72void Tff7b72thisTb4b4b4.Te6edf3reportPluginFailureTb4b4b4(
Te6edf3pluginIdTb4b4b4,
Te6edf3eventTb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Plugin worker crashed"Tb4b4b4,
Te6edf3apiClientTb4b4b4,
Ta5d6ff"frontend-worker"
Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3unloadPluginTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Te6edf3workerTb4b4b4.Te6edf3postMessageTb4b4b4(Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"init"Tb4b4b4,
Te6edf3pluginIdTb4b4b4,
Te6edf3permissionsTff7b72: Te6edf3manifestTb4b4b4.Te6edf3permissions Tff7b72|| Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3sourceTb4b4b4,
Te6edf3labelsTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3cleanupTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4...Tff7b72thisTb4b4b4.Te6edf3registerContributionsTb4b4b4(Te6edf3pluginIdTb4b4b4, Te6edf3manifestTb4b4b4, Te6edf3labelsTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3cleanupTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3clearPluginUiLabelsTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3manifestTb4b4b4.Te6edf3permissionsTff7b72?Tb4b4b4.Te6edf3hooks Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3eventHandler Tff7b72= Tb4b4b4(Te6edf3payloadTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3payloadTff7b72?Tb4b4b4.Te6edf3plugin_id Tff7b72!== Te6edf3pluginIdTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3workerTb4b4b4.Te6edf3postMessageTb4b4b4(Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"event"Tb4b4b4,
Te6edf3eventTff7b72: Te6edf3payloadTff7b72?Tb4b4b4.Te6edf3eventTb4b4b4,
Te6edf3payloadTff7b72: Te6edf3payloadTff7b72?Tb4b4b4.Te6edf3payloadTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3onWsEventTb4b4b4(Ta5d6ff"plugin.event"Tb4b4b4, Te6edf3eventHandlerTb4b4b4)Tb4b4b4;
Te6edf3cleanupTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3offWsEventTb4b4b4(Ta5d6ff"plugin.event"Tb4b4b4, Te6edf3eventHandlerTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3requestHandler Tff7b72= Tff7b72async Tb4b4b4(Te6edf3messageTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3message Tff7b72|| Te6edf3messageTb4b4b4.Te6edf3type Tff7b72!== Ta5d6ff"request"Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72let Te6edf3resultTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3messageTb4b4b4.Te6edf3kind Tff7b72=== Ta5d6ff"invoke"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Te6edf3apiClientTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/plugins/Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3pluginIdTb4b4b4)Tffd700}Ta5d6ff/invokeTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3methodTff7b72: Te6edf3messageTb4b4b4.Te6edf3payloadTb4b4b4.Te6edf3methodTb4b4b4,
Te6edf3argsTff7b72: Te6edf3messageTb4b4b4.Te6edf3payloadTb4b4b4.Te6edf3argsTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3result Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3resultTb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3messageTb4b4b4.Te6edf3kind Tff7b72=== Ta5d6ff"manager"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Te6edf3apiClientTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/plugins/Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3pluginIdTb4b4b4)Tffd700}Ta5d6ff/invokeTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3methodTff7b72: Ta5d6ff"callManager"Tb4b4b4,
Te6edf3argsTff7b72: Te6edf3messageTb4b4b4.Te6edf3payloadTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3result Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3resultTb4b4b4;
Tb4b4b4}
Te6edf3workerTb4b4b4.Te6edf3postMessageTb4b4b4(Tb4b4b4{ Te6edf3requestIdTff7b72: Te6edf3messageTb4b4b4.Te6edf3requestIdTb4b4b4, Te6edf3result Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3errorTb4b4b4) Tb4b4b4{
Te6edf3workerTb4b4b4.Te6edf3postMessageTb4b4b4(Tb4b4b4{
Te6edf3requestIdTff7b72: Te6edf3messageTb4b4b4.Te6edf3requestIdTb4b4b4,
Te6edf3errorTff7b72: Te6edf3errorTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Tffa657StringTb4b4b4(Te6edf3errorTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Te6edf3workerTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"message"Tb4b4b4, Tb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72void Te6edf3requestHandlerTb4b4b4(Te6edf3eventTb4b4b4.Te6edf3dataTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3instancesTb4b4b4.Te6edf3setTb4b4b4(Te6edf3pluginIdTb4b4b4, Tb4b4b4{
Te6edf3workerTb4b4b4,
Te6edf3cleanupTb4b4b4,
Te6edf3manifestTb4b4b4,
Te6edf3lastDescriptorTff7b72: Tff7b72nullTb4b4b4,
Te6edf3apiClientTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {string} pluginId
* @param {string} reason
* @param {ReturnType<import('../apiClient.js').createApiClient>} apiClient
* @param {string} [source]
*/
Tff7b72async Te6edf3reportPluginFailureTb4b4b4(Te6edf3pluginIdTb4b4b4, Te6edf3reasonTb4b4b4, Te6edf3apiClientTb4b4b4, Te6edf3source Tff7b72= Ta5d6ff"frontend"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3now Tff7b72= Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3last Tff7b72= Te6edf3lastFailureReportAtTb4b4b4.Te6edf3getTb4b4b4(Te6edf3pluginIdTb4b4b4) Tff7b72|| T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3now Tff7b72- Te6edf3last Tff7b72< Te6edf3FAILURE_REPORT_INTERVAL_MSTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3lastFailureReportAtTb4b4b4.Te6edf3setTb4b4b4(Te6edf3pluginIdTb4b4b4, Te6edf3nowTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Te6edf3apiClientTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/plugins/Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3pluginIdTb4b4b4)Tffd700}Ta5d6ff/report-failureTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3reasonTb4b4b4,
Te6edf3sourceTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3errorTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3debugTb4b4b4(Ta5d6ff"Plugin failure report failed:"Tb4b4b4, Te6edf3errorTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3getLastDescriptorTb4b4b4(Te6edf3pluginIdTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3instancesTb4b4b4.Te6edf3getTb4b4b4(Te6edf3pluginIdTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3lastDescriptor Tff7b72?? Tff7b72nullTb4b4b4;
Tb4b4b4}

Te6edf3requestUiRefreshTb4b4b4(Te6edf3pluginIdTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3instance Tff7b72= Tff7b72thisTb4b4b4.Te6edf3instancesTb4b4b4.Te6edf3getTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3instanceTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3instanceTb4b4b4.Te6edf3workerTb4b4b4.Te6edf3postMessageTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"refresh-ui" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {string} pluginId
* @param {PluginManifest} manifest
* @param {Record<string, string>} labels
*/
Te6edf3registerContributionsTb4b4b4(Te6edf3pluginIdTb4b4b4, Te6edf3manifestTb4b4b4, Te6edf3labelsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3cleanup Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3contributes Tff7b72= Te6edf3manifestTb4b4b4.Te6edf3contributes Tff7b72|| Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3item Tff7b72of Te6edf3contributesTb4b4b4.Te6edf3navItems Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4{
Te6edf3registerNavItemTb4b4b4(Tb4b4b4{
Tb4b4b4...Te6edf3itemTb4b4b4,
Te6edf3pluginIdTb4b4b4,
Te6edf3labelTff7b72: Te6edf3resolvePluginUiStringTb4b4b4(Te6edf3labelsTb4b4b4, Te6edf3itemTb4b4b4.Te6edf3labelKeyTb4b4b4, Te6edf3manifestTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3cleanupTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3unregisterNavItemTb4b4b4(Te6edf3itemTb4b4b4.Te6edf3idTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3item Tff7b72of Te6edf3contributesTb4b4b4.Te6edf3toolsPageEntries Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4{
Te6edf3registerToolTb4b4b4(Tb4b4b4{
Tb4b4b4...Te6edf3itemTb4b4b4,
Te6edf3pluginIdTb4b4b4,
Te6edf3titleTff7b72: Te6edf3resolvePluginUiStringTb4b4b4(Te6edf3labelsTb4b4b4, Te6edf3itemTb4b4b4.Te6edf3titleKeyTb4b4b4, Te6edf3manifestTb4b4b4)Tb4b4b4,
Te6edf3descriptionTff7b72: Te6edf3resolvePluginUiStringTb4b4b4(Te6edf3labelsTb4b4b4, Te6edf3itemTb4b4b4.Te6edf3descriptionKeyTb4b4b4, Te6edf3manifestTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3cleanupTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3unregisterToolTb4b4b4(Te6edf3itemTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3cleanupTb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {string} pluginId
* @param {unknown} message
* @param {ReturnType<import('../apiClient.js').createApiClient>} [apiClient]
*/
Te6edf3handleWorkerMessageTb4b4b4(Te6edf3pluginIdTb4b4b4, Te6edf3messageTb4b4b4, Te6edf3apiClientTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3message Tff7b72|| Tff7b72typeof Te6edf3message Tff7b72!== Ta5d6ff"object"Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3messageTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"ui"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3instance Tff7b72= Tff7b72thisTb4b4b4.Te6edf3instancesTb4b4b4.Te6edf3getTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3instanceTb4b4b4) Tb4b4b4{
Te6edf3instanceTb4b4b4.Te6edf3lastDescriptor Tff7b72= Te6edf3messageTb4b4b4.Te6edf3descriptorTb4b4b4;
Tb4b4b4}
Tffa657windowTb4b4b4.Te6edf3dispatchEventTb4b4b4(
Tff7b72new Te6edf3CustomEventTb4b4b4(Ta5d6ff"meshchatx-plugin-ui"Tb4b4b4, Tb4b4b4{
Te6edf3detailTff7b72: Tb4b4b4{ Te6edf3pluginIdTb4b4b4, Te6edf3descriptorTff7b72: Te6edf3messageTb4b4b4.Te6edf3descriptor Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3messageTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"error"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3client Tff7b72= Te6edf3apiClient Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3instancesTb4b4b4.Te6edf3getTb4b4b4(Te6edf3pluginIdTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3apiClientTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3clientTb4b4b4) Tb4b4b4{
Tff7b72void Tff7b72thisTb4b4b4.Te6edf3reportPluginFailureTb4b4b4(Te6edf3pluginIdTb4b4b4, Te6edf3messageTb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Plugin activation failed"Tb4b4b4, Te6edf3clientTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657windowTb4b4b4.Te6edf3dispatchEventTb4b4b4(
Tff7b72new Te6edf3CustomEventTb4b4b4(Ta5d6ff"meshchatx-plugin-error"Tb4b4b4, Tb4b4b4{
Te6edf3detailTff7b72: Tb4b4b4{ Te6edf3pluginIdTb4b4b4, Te6edf3messageTff7b72: Te6edf3messageTb4b4b4.Te6edf3message Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3unloadPluginTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3messageTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"toast"Tb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3showTb4b4b4(Te6edf3messageTb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff""Tb4b4b4, Te6edf3messageTb4b4b4.Te6edf3toastType Tff7b72|| Ta5d6ff"info"Tb4b4b4, Te6edf3messageTb4b4b4.Te6edf3duration Tff7b72?? T79c0ff5000Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3messageTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"download"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3blob Tff7b72= Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3messageTb4b4b4.Te6edf3data Tff7b72|| Ta5d6ff""Tb4b4b4]Tb4b4b4, Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"application/json"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3url Tff7b72= Te6edf3URLTb4b4b4.Te6edf3createObjectURLTb4b4b4(Te6edf3blobTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3a Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"a"Tb4b4b4)Tb4b4b4;
Te6edf3aTb4b4b4.Te6edf3href Tff7b72= Te6edf3urlTb4b4b4;
Te6edf3aTb4b4b4.Te6edf3download Tff7b72= Te6edf3messageTb4b4b4.Te6edf3filename Tff7b72|| Ta5d6ff"download.json"Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3appendChildTb4b4b4(Te6edf3aTb4b4b4)Tb4b4b4;
Te6edf3aTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3removeChildTb4b4b4(Te6edf3aTb4b4b4)Tb4b4b4;
Te6edf3URLTb4b4b4.Te6edf3revokeObjectURLTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Plugin download failed:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Te6edf3unloadPluginTb4b4b4(Te6edf3pluginIdTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3instance Tff7b72= Tff7b72thisTb4b4b4.Te6edf3instancesTb4b4b4.Te6edf3getTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3instanceTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3instanceTb4b4b4.Te6edf3workerTb4b4b4.Te6edf3terminateTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3fn Tff7b72of Te6edf3instanceTb4b4b4.Te6edf3cleanupTb4b4b4) Tb4b4b4{
Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3instancesTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4;
Te6edf3lastFailureReportAtTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3postActionTb4b4b4(Te6edf3pluginIdTb4b4b4, Te6edf3actionIdTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3instance Tff7b72= Tff7b72thisTb4b4b4.Te6edf3instancesTb4b4b4.Te6edf3getTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3instanceTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3instanceTb4b4b4.Te6edf3workerTb4b4b4.Te6edf3postMessageTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"action"Tb4b4b4, Te6edf3actionId Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3postInputTb4b4b4(Te6edf3pluginIdTb4b4b4, Te6edf3idTb4b4b4, Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3instance Tff7b72= Tff7b72thisTb4b4b4.Te6edf3instancesTb4b4b4.Te6edf3getTb4b4b4(Te6edf3pluginIdTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3instanceTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3instanceTb4b4b4.Te6edf3workerTb4b4b4.Te6edf3postMessageTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"input"Tb4b4b4, Te6edf3idTb4b4b4, Te6edf3value Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72export Tff7b72const Te6edf3pluginHost Tff7b72= Tff7b72new Te6edf3PluginHostTb4b4b4(Tb4b4b4)Tb4b4b4;


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────